package com.huluobo.jetpackkotlindemo.lifecycle

import android.content.Intent
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelProvider
import com.huluobo.jetpackkotlindemo.livedata_viewmodel.AdViewModel
import com.huluobo.jetpackkotlindemo.MainActivity
import com.huluobo.jetpackkotlindemo.R

/**
 * Created by lc on 2022/12/1.
 * Lifecycle 总结:
 * 1.如果需要使用LifeCycle 首先需要实现一个接口:LifecycleObserver 让他可以去感知宿主的声明周期
 * 2.需要是一个宿主,LifecycleOwner,一般来讲AppCompatActivity 都已经实现了这个宿主的接口,可以直接使用
 * 3.通过lifecycle.addObserver(adManager),来订阅(连接)观察者和宿主之间的关系
 * 4.可以有效解决在宿主中控制其他控件的生命周期,让观察者可以根据宿主的生命周期自行做出判断来调用某些方法(销毁或者创建)
 * 5.自定义LifecycleOwner,需要实现一个LifecycleRegistry,通过他去自定义宿主的声明
 * ,也就是在activity中对应的生命周期上写出对应的方法,才可以调用,一般直接使用AppCompatActivity即可
 */
class AdActivity : AppCompatActivity() {
    //展示广告的时间,lateinit相当于声明一个空类型变量,在赋值后可以形成对应的类型
    lateinit var time: TextView

    //跳过广告的按钮
    lateinit var go: Button

    //存取值的key
    companion object {
        const val KEY = "key"
    }

    lateinit var adViewModel: AdViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_ad)
        time = findViewById(R.id.time)
        go = findViewById(R.id.btn_go)
        adViewModel = ViewModelProvider(this).get(AdViewModel::class.java)
        val adManager = AdManger(adViewModel)
        lifecycle.addObserver(adManager)

        //1.观察viewModel中LiveData(timingResult)这个对象,当值发生改变时,都会调用一次赋值的方法
        adViewModel._timingResult.observe(this, {
            time.text = "广告剩余时间:${it}秒"
            if (it ==1L){
                val intent = Intent(this@AdActivity, MainActivity::class.java)
                this@AdActivity.startActivity(intent)
                this@AdActivity.finish()
            }
        })
        go.setOnClickListener {
            val intent = Intent(this@AdActivity, MainActivity::class.java)
            this@AdActivity.startActivity(intent)
            this@AdActivity.finish()
        }
    }
}